/**
 * 
 */
package com.nari.baseinfo.service;

import java.io.File;
import java.util.List;
import java.util.Map;

import com.nari.baseinfo.model.IBuilding;
import com.nari.coreframe.service.IGenericService;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IBuildingService extends IGenericService<IBuilding, String> {

	/**
	 * 分页查询楼栋信息
	 * @param buildingName 楼栋名称(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-8
	 */
	public ResultWithPageCond<IBuilding> queryBuildingPage(String buildingName,
			String projectUID, String communityUID, PageCond pageCond) throws Exception;

	/**
	 * 带附件上传的楼栋信息保存及修改
	 * @param building 楼栋信息实体
	 * @param attachFile 楼栋附件
	 * @param fileName 附件文件名
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-11
	 */
	public ResponseMsg saveOrUpdateBuilding(IBuilding building, File attachFile, 
			String fileName) throws Exception;

	/**
	 * 删除楼栋附件
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-11
	 */
	public ResponseMsg deleteBuildingAttachFile(String buildingUID) throws Exception;

	/**
	 * 通过楼栋唯一标识删除楼栋信息，并删除对应的楼栋附件,并级联删除关联信息
	 * 关联信息包括：楼栋、单元、热用户、系统用户及角色、热量表、分配表、散热器、用户分摊账单
	 * 注意：热量表数据、分配表数据等表计数据具有不可恢复性，因此不能作为级联删除的对象
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-12
	 */
	public ResponseMsg deleteBuildingByUID(String buildingUID) throws Exception;

	/**
	 * 通过楼栋ID列表查询楼栋信息
	 * @param idList 楼栋ID列表，若列表为空，则返回空列表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-13
	 */
	public List<IBuilding> queryBuildingByIDList(List<String> idList) throws Exception;

	/**
	 * 根据楼栋所属信息（所属项目、所属小区）查询楼栋列表 若项目ID、小区ID都不存在，则返回空列表
	 * @param projectUID 所属项目
	 * @param communityUID 所属小区
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-12
	 */
	public List<IBuilding> queryBuildingByBelongings(String projectUID,
			String communityUID) throws Exception;

	/**
	 * 通过楼栋列表查询与之关联的小区id-communityName映射表
	 * @param buildingList 楼栋列表，若楼栋列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-25
	 */
	public Map<String, String> queryReferCommunityMap(List<IBuilding> buildingList) 
			throws Exception;
	
	/**
	 * 通过楼栋所属关系统计楼栋的个数
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-21
	 */
	public int countBuildingSumByBelongs(String projectUID, String communityUID) throws Exception;

	/**
	 * 统计相同楼栋编号的楼栋数量，避免系统录入相同楼栋编号的楼栋信息
	 * @param buildingID
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-22
	 */
	public int countByBuildingID(String buildingID, String buildingUID) throws Exception;
	
}
